# -*- coding: UTF-8 -*-
from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QStackedWidget, QFrame, QSizeGrip
from functools import partial
from Netconfig.base_window import BaseWindow


class HistoryFrame(QFrame):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setStyleSheet("background-color: #3e3e3e; border-radius: 10px; padding: 0px; color: white;")
        self.setFixedHeight(160)  # 增加高度以容纳两行按钮
        self._first_row_layout = None
        self._second_row_layout = None

    def set_layouts(self, first_row_layout, second_row_layout):
        self._first_row_layout = first_row_layout
        self._second_row_layout = second_row_layout


class UpdatelogWindow(BaseWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        
        # 添加主题相关属性
        self.current_theme = "initial"  # 默认主题
        
        # 主窗口的中央小部件
        central_widget = QWidget()
        self.setCentralWidget(central_widget)

        # 主布局改为垂直布局
        main_layout = QVBoxLayout(central_widget)
        main_layout.setSpacing(10)
        main_layout.setContentsMargins(10, 10, 10, 10)

        # 顶部历史版本区域
        history_frame = HistoryFrame()
        history_layout = QVBoxLayout(history_frame)

        # 创建水平布局来放置标签和版本按钮
        header_layout = QHBoxLayout()

        # 添加历史版本标签
        history_label = QLabel("历史版本")
        history_label.setStyleSheet("font-size: 18px; font-weight: bold;")
        header_layout.addWidget(history_label)

        # 创建一个容器来放置两行版本按钮
        version_container = QWidget()
        version_layout = QVBoxLayout(version_container)
        version_layout.setContentsMargins(0, 0, 0, 0)  # 移除内边距

        # 创建两个水平布局分别用于第一行和第二行按钮
        first_row_layout = QHBoxLayout()
        second_row_layout = QHBoxLayout()

        # 创建按钮并设置固定大小
        version_buttons_first_row = [
            ("2024.7.7\nv1.1", "2024.7.7"),
            ("2024.7.13\nv1.2", "2024.7.13"),
            ("2024.8.17\nv1.3", "2024.8.17"),
            ("2024.10.08\nv1.4", "2024.10.08"),
            ("2024.10.16\nv1.5", "2024.10.16"),
            ("2024.10.29\nv1.6", "2024.10.29"),
            ("2024.11.18\nv1.7", "2024.11.18"),
        ]

        version_buttons_second_row = [
            ("2024.12.01\nv1.8", "2024.12.01"),
            ("2024.12.26\nv1.9", "2024.12.26"),
            ("2025.01.23\nv2.0", "2025.01.23"),
        ]

        # 修改按钮样式，添加透明度控制
        button_style = """
            QPushButton {
                background-color: #4e4e4e;
                color: white;
                border: 2px solid #7f7fff;
                border-radius: 5px;
                padding: 5px 10px;
                font-size: 14px;
                min-width: 100px;
                max-width: 100px;
                min-height: 50px;
                max-height: 50px;
                opacity: 0;
            }
            QPushButton:hover {
                background-color: #5e5e5e;
                opacity: 1;
            }
        """

        # 最新版本按钮样式（始终显示）
        latest_button_style = """
            QPushButton {
                background-color: #4e4e4e;
                color: white;
                border: 2px solid #7f7fff;
                border-radius: 5px;
                padding: 5px 10px;
                font-size: 14px;
                min-width: 100px;
                max-width: 100px;
                min-height: 50px;
                max-height: 50px;
            }
            QPushButton:hover {
                background-color: #5e5e5e;
            }
        """

        # 添加第一行按钮
        for text, version in version_buttons_first_row:
            btn = QPushButton(text)
            btn.setStyleSheet(latest_button_style)
            btn.setProperty('version', version)
            btn.clicked.connect(self.on_version_button_clicked)
            first_row_layout.addWidget(btn)
        first_row_layout.addStretch()

        # 添加第二行按钮
        for i, (text, version) in enumerate(version_buttons_second_row):
            btn = QPushButton(text)
            btn.setStyleSheet(latest_button_style)
            btn.setProperty('version', version)
            btn.clicked.connect(self.on_version_button_clicked)
            second_row_layout.addWidget(btn)
        second_row_layout.addStretch()

        # 将两行按钮布局添加到版本容器中
        version_layout.addLayout(first_row_layout)
        version_layout.addLayout(second_row_layout)

        # 将版本容器添加到header布局中
        header_layout.addWidget(version_container)

        # 将header布局添加到主布局中
        history_layout.addLayout(header_layout)

        # 在添加完所有按钮后，设置布局引用
        history_frame.set_layouts(first_row_layout, second_row_layout)

        # 添加历史版本区域到主布局
        main_layout.addWidget(history_frame)

        # 创建内容显示区域
        content_widget = QWidget()
        content_layout = QVBoxLayout(content_widget)
        content_layout.setContentsMargins(0, 0, 0, 0)

        # 版本标签
        self.current_version_label = QLabel()
        self.current_version_label.setStyleSheet("font-size: 24px; font-weight: bold;")
        content_layout.addWidget(self.current_version_label)

        # 功能区域
        self.feature_label = QLabel("功能")
        self.feature_label.setStyleSheet("font-size: 18px; font-weight: bold; color: #ff79c6;")
        content_layout.addWidget(self.feature_label)
        self.feature_content = QLabel()
        content_layout.addWidget(self.feature_content)

        # 漏洞修复区域
        self.fix_label = QLabel("漏洞修复")
        self.fix_label.setStyleSheet("font-size: 18px; font-weight: bold; color: #ff79c6;")
        content_layout.addWidget(self.fix_label)
        self.fix_content = QLabel()
        content_layout.addWidget(self.fix_content)

        # 代码质量区域
        self.quality_label = QLabel("代码质量")
        self.quality_label.setStyleSheet("font-size: 18px; font-weight: bold; color: #ff79c6;")
        content_layout.addWidget(self.quality_label)
        self.quality_content = QLabel()
        content_layout.addWidget(self.quality_content)

        # 加内容区域到主布局，并设置拉伸
        main_layout.addWidget(content_widget, 1)

        # 显示默认版本内容
        self.show_update_content("2025.01.23")

    def show_update_content(self, version):
        """显示更新内容"""
        # 获取当前主题的文字颜色
        text_color = "white" if self.current_theme == "dark" else "black"
        
        # 设置基本样式
        content_style = f"""
            font-size: 13px;
            color: {text_color};
        """
        version_style = f"""
            font-size: 24px; 
            font-weight: bold;
            color: {text_color};
        """
        
        if version == "2024.7.7":
            self.current_version_label.setText("2024.7.7")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setText("- 合并单机版多个功能(配置生成、巡检、下发、批量ping)\n- 增加设备信息管理功能\n- 增加协议检测功能")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 修复了巡检、下发功能的界面未响应的bug")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 提升了代码质量\n√ 优化了性能")
            self.quality_content.setStyleSheet(content_style)
            
        elif version == "2024.7.13":
            self.current_version_label.setText("2024.7.13")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setText("- 新增更新日志功能\n- 编辑、删除、登录按钮更换颜色\n- 设备信息新增筛选功能\
                                         \n- 在线状态中根据IP从小到大排序,满足IP最小并且在线的设备优先显示\n- 删除设备时弹窗标红提醒")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 修复设备信息更新在线状态时的未响应bug\n√ 修复设备信息筛选功能未对应编辑、删除、登录按钮的bug\n√ 修复了协议检测功能不支持telnet的bug")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 将设备信息、配置巡检、配置下发、协议检测所选择的表格合并为1个表格,同1个表头\n√ 优化了代码结构\n√ 优化导航栏选择的显示效果")
            self.quality_content.setStyleSheet(content_style)
        
        elif version == "2024.8.17":
            self.current_version_label.setText("2024.8.17")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setText("- 新增首页设备状态统计及本机CPU、内存显示\n- 设备信息新增详细信息显示\n- 配置巡检和配置下发新增定时任务功能\n- 配置巡检新增邮件通知功能")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 设备信息修复登录功能未响应的bug")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 优化设备信息筛选功能\n√ 优化了代码结构\n√ 优化了配置下发的逻辑")
            self.quality_content.setStyleSheet(content_style)
        
        elif version == "2024.10.08":
            self.current_version_label.setText("2024.10.08")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setText("- 全局优化:\n  1、按钮和下拉选择框背景色为白色、蓝色圆角边框\n  2、按钮加入对应图标\
                                         \n  3、支持软件中打开excel表格编辑数据\n- 首页:新增设备告警统计\n- 设备信息:\
                                         \n  1、新增获取软件版本、CPU、内存、启动时长、风扇、电源、温度\n  2、新增端口配置,可以手动配置单台的端口\
                                         \n  3、新增手动修改轮巡时间\n  4、新增设备信息排序的功能\n- 配置下发:新增手动输入下发命令并且修改每台设备的配置文件\
                                         \n- 批量ping:新增网段批量ping功能")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 修复手动删除所有设备,首页在线设备数量进度条还在的bug\n√ 修复配置生成偶尔闪退的bug")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 优化设备信息筛选功能,去掉筛选按钮\n√ 优化设备信息获取方式\n")
            self.quality_content.setStyleSheet(content_style)
        
        elif version == "2024.10.16":
            self.current_version_label.setText("2024.10.16")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setStyleSheet("font-size: 13px;")
            self.fix_content.setStyleSheet("font-size: 13px;")
            self.quality_content.setStyleSheet("font-size: 13px;")
            self.feature_content.setText("- 全局优化:\n  1、devices.xlsx表格增加设备型号字段\n- 首页:\n- 设备信息:\n  1、添加设备增加设备型号字段\
                                         \n  2、表头修改背景色为绿色,字体白色\n  3、新增监控项修改功能,支持修改设备的监控项正则表达式\
                                         \n- 配置巡检:\n  1、新增巡检命令按钮,快捷修改巡检命令")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 设备信息双击修改数据的bug\n√ 修复SecureCRT系统找不到文件的bug")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 端口配置功能:去掉导入设备信息按钮\n√ 设备信息:\n  1、获取方式:去掉获取设备型号字段\
                                         \n  2、更新方式:改为逐台更新\n  3、单击数据后Ctrl+C复制功能\
                                         \n√ 代码结构,优化代码逻辑")
            self.quality_content.setStyleSheet(content_style)
        
        elif version == "2024.10.29":
            self.current_version_label.setText("2024.10.29")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setStyleSheet("font-size: 13px;")
            self.fix_content.setStyleSheet("font-size: 13px;")
            self.quality_content.setStyleSheet("font-size: 13px;")
            self.feature_content.setText("- 设备信息:\n  1、添加设备信息更新时删除型号字段\
                                         \n- 配置生成:\n  1、增加web生成配置功能,支持web端生成开局、DHCP、端口聚合配置\
                                         \n- 配置巡检:\n  1、新增巡检命令生成,支持手动生成所需巡检命令\
                                         \n- 实用工具:\n  1、导航栏新增实用工具菜单,协议检测合并到实用工具\
                                         \n  2、新增IP/MAC收集工具,收集设备IP、MAC地址和设备端口汇总成对应表,支持导出为excel表格\
                                         \n  3、新增IP冲突检测工具,检测网络设备IP是否冲突汇总成对应表并给出提示,支持导出为excel表格\
                                         \n  4、新增IP地址计算,支持计算IP地址段,计算IP地址、子网掩码可用主机数量,子网掩码转换成CIDR,\
                                         \n根据所需IP地址数量计算子网掩码")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 端口配置主机名列表需要重启才能更新的bug")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 配置巡检:配置巡检命令生成\n√ 打包为多文件安装模式,支持安装到其他目录\n√ 优化代码结构,优化代码逻辑")
            self.quality_content.setStyleSheet(content_style)
        
        elif version == "2024.11.18":
            self.current_version_label.setText("2024.11.18")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setStyleSheet("font-size: 13px;")
            self.fix_content.setStyleSheet("font-size: 13px;")
            self.quality_content.setStyleSheet("font-size: 13px;")
            self.feature_content.setText("- 设备信息:\n  1、导出设备信息支持根据轮巡时长自动导出为excel表格\
                                         \n- 配置巡检:\n  1、删除编辑数据和选择文件按钮,所有的设备都从设备信息页面获取\
                                         \n  2、设备信息以表格形式显示,支持排序\
                                         \n  3、记录设备上次巡检时间,巡检状态\
                                         \n  4、可以查看设备的巡检日志和巡检结果及删除巡检结果\
                                         \n- 实用工具:\n  1、IP/MAC和IP冲突检测导出excel表格时支持自定义文件夹,导出完成后可选择是否打开表格\
                                         \n- IP地址管理:\n  1、新增IP地址管理,支持扫描IP地址段,支持ARP扫描,支持ping扫描\
                                         \n  2、新增IP地址段统计视图,IP地址可视化\
                                         \n  3、新增IP地址段分组,单个地址添加说明\
                                         \n  4、IP地址管理支持导入Excel表格,支持批量添加IP地址段\
                                         \n  5、支持隐藏网络结构显示界面")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 修复IP地址管理扫描时偶尔闪退的bug\n√ 修复更新日志中历史版本根据字体数量竖跳问题")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 如果是永久激活码,则不再显示激活码界面\n√ 优化代码结构,优化代码逻辑")
            self.quality_content.setStyleSheet(content_style)
        
        elif version == "2024.12.01":
            self.current_version_label.setText("2024.12.01")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setStyleSheet("font-size: 13px;")
            self.fix_content.setStyleSheet("font-size: 13px;")
            self.quality_content.setStyleSheet("font-size: 13px;")
            self.feature_content.setText("- 设备信息:\n 1、 端口信息中新增搜索端口和状态过滤\
                                         \n- 文本对比:\n  1、提供左右两个编辑器窗口,支持文本拖拽、文件上传、\
                                         \n复制粘贴等基本操作,可以对比显示两段文本的差异。\
                                         \n  2、具有行号显示、差异高亮(删除显示红色背景,新增显示绿色背景)、\
                                         \n文本搜索(Ctrl+F)等功能,支持同步滚动。\
                                         \n  3、集成了历史记录功能,可以保存之前的对比记录,并支持查看、恢复和删除历史记录。\
                                         \n  4、可以查看设备的巡检日志和巡检结果及删除巡检结果\
                                         \n- 实用工具:\n  1、IP/MAC和IP冲突检测导出excel表格时支持自定义文件夹,\
                                         \n导出完成后可选择是否打开表格\
                                         \n- IP地址管理:\n  1、新增IP地址管理,支持扫描IP地址段,支持ARP扫描,支持ping扫描\
                                         \n  2、新增IP地址段统计视图,IP地址可视化\
                                         \n  3、新增IP地址段分组,单个地址添加说明\
                                         \n  4、IP地址管理支持导入Excel表格,支持批量添加IP地址段\
                                         \n  5、支持隐藏网络结构显示界面")
            self.feature_content.setStyleSheet(content_style)
        
        elif version == "2024.12.26":
            self.current_version_label.setText("2024.12.26")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setStyleSheet("font-size: 13px;")
            self.fix_content.setStyleSheet("font-size: 13px;")
            self.quality_content.setStyleSheet("font-size: 13px;")
            self.feature_content.setText("- 设备信息:\n 1、选择设备后,点击端口配置直接弹出选择设备的端口配置界面\
                                         \n 2、登录设备后支持快捷命令的输入,支持快捷命令的添加、删除、编辑、缩放和展开\
                                         \n 3、使用异步处理和队列管理设备检查任务,实现数据分页加载\
                                         \n- 配置生成:\n  1、添加表格显示配置生成的设备信息\
                                         \n- 拓扑管理:\n  1、新增拓扑管理,支持拓扑图自动生成\
                                         \n  2、支持拓扑图导出为图片\
                                         \n  3、支持拓扑图在浏览器中打开\
                                         \n  4、支持自动刷新拓扑图\
                                         \n- 实用工具:\n  1、新增配置监控,支持监控配置文件的修改,查看配置文件的修改历史和导出修改历史\
                                         \n  2、新增端口监控,支持监控端口状态,可以持续监控端口状态,支持手动或者自动导出日志\
                                         \n  3、端口监控支持路由跟踪功能\
                                         \n  4、新增基线检查,支持检查设备配置文件的基线是否符合要求\
                                         \n  5、支持新建程序和网址为实用工具菜单\
                                         \n- AI助手:\n  1、新增AI助手,支持AI对话,支持AI对话历史记录\
                                         ")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 修复配置巡检中取消全选后,会自动全选的bug\n√ 修复更新日志中历史版本根据字体数量竖跳问题")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 设备信息优化数据库查询\n√ 优化处理设备状态更新逻辑")
            self.quality_content.setStyleSheet(content_style)
        
        elif version == "2025.01.23":
            self.current_version_label.setText("2025.01.23")
            self.current_version_label.setStyleSheet(version_style)
            
            self.feature_content.setStyleSheet("font-size: 13px;")
            self.fix_content.setStyleSheet("font-size: 13px;")
            self.quality_content.setStyleSheet("font-size: 13px;")
            self.feature_content.setText("- 登录:\n 1、新增登录界面,支持登录、注册、忘记密码、退出登录、切换账号\
                                         \n 2、新增账号权限管理,分为管理员、普通用户\
                                         \n- 设备信息:\n 1、登录管理员账号后,支持查看设备密码、全选、编辑、删除、导入、添加、端口配置功能\
                                         \n- 常用配置:\n  1、新增配置生成功能,支持华为、H3C、思科等主流厂商\
                                         \n  2、新增配置模板管理,支持保存和复用常用配置\
                                         \n  3、新增批量配置下发功能,支持多设备同时配置\
                                         \n- 实用工具:\n  1、新增配置转换,支持Cisco IOS、Huawei VRP和H3C设备配置互转\
                                         \n  2、添加配置转换失败命令高亮显示功能\
                                         \n  3、新增配置转换历史记录,支持查看、恢复和删除历史记录\
                                         ")
            self.feature_content.setStyleSheet(content_style)
            
            self.fix_content.setText("√ 修复配置下发时的连接超时问题\n√ 修复部分厂商配置命令生成错误的问题")
            self.fix_content.setStyleSheet(content_style)
            
            self.quality_content.setText("√ 优化界面布局，采用标签页设计提升用户体验\n√ 优化配置预览功能，实时显示生成的配置命令\n√ 改进日志记录系统，支持按设备查看配置下发日志")
            self.quality_content.setStyleSheet(content_style)

    def on_version_button_clicked(self):
        """处理版本按钮点击"""
        btn = self.sender()
        if btn:
            version = btn.property('version')
            self.show_update_content(version)

    def update_theme(self, theme_name):
        """更新主题"""
        self.current_theme = theme_name
        text_color = "white" if theme_name == "dark" else "black"
        
        # 更新版本标签文字颜色
        self.current_version_label.setStyleSheet(f"""
            font-size: 24px; 
            font-weight: bold;
            color: {text_color};
        """)
        
        # 更新功能标签文字颜色
        self.feature_content.setStyleSheet(f"""
            font-size: 13px;
            color: {text_color};
        """)
        
        # 更新漏洞修复标签文字颜色
        self.fix_content.setStyleSheet(f"""
            font-size: 13px;
            color: {text_color};
        """)
        
        # 更新代码质量标签文字颜色
        self.quality_content.setStyleSheet(f"""
            font-size: 13px;
            color: {text_color};
        """)
        
        # 更新历史版本标签文字颜色
        history_label = self.findChild(QLabel, "history_label")
        if history_label:
            history_label.setStyleSheet(f"""
                font-size: 18px; 
                font-weight: bold;
                color: {text_color};
            """)